#!/usr/bin/python
#-*-coding:utf-8-*-

#九九乘法表（四种表*两种循环写法）
#知识点for...in,while,format()
'''
1.三角形乘法表左上角记为（1,1）坐标
2.每一个表达式为列*行（col*row）
3.注意换行以及占位
'''

#第一种for...in循环方法：

#左下三角
#利用range()函数生成row行数（1到9）正循环
for row in range(1, 10):
    #利用range()函数生成col列数（1到（行数+1））正循环
    for col in range(1, row + 1):
        # 使用format占位，保证输出效果整齐，end = ''用于不换行
        print('{} * {} = {:<5}'.format(col, row, col * row), end = '')
    #换行
    print('')
#分割线
print('=' * 120)
#空行
print('\n')


#左上三角
#利用range()函数生成row行数（9到0）倒循环（步长-1）
for row in range(9, 0, -1):
    #利用range()函数生成col列数（1到（行数+1））正循环
    for col in range(1, row + 1):
        # 使用format占位，保证输出效果整齐，end = ''用于不换行
        print('{} * {} = {:<5}'.format(col, row, col * row), end = '')
    print('')
print('=' * 120)
print('\n')


#右下三角
#利用range()函数生成row行数（1到9）正循环
for row in range(1, 10):
    #利用range()函数生成（9到行数）倒循环（步长-1）的数（定位）
    for block in range(9, row, -1):
        #end= ''用于不换行，引号内为每组乘法式的长度（这里是9）
        print (end = '             ')
    #利用range()函数生成col列数（row到0）倒循环（步长-1）
    for col in range(row, 0, -1):
        # 使用format占位，保证输出效果整齐，end = ''用于不换行
        print('{} * {} = {:<5}'.format(col, row, col * row), end = '')
    print('')
print('=' * 120)
print('\n')


#右上三角
#利用range()函数生成row行数（9到0）倒循环（步长-1）
for row in range(9, 0, -1):
    #利用range()函数生成（9到行数）倒循环（步长-1）的数（定位）
    for block in range(9, row, -1):
        #end= ''用于不换行，引号内为每组乘法式的长度（这里是9）
        print (end = '             ')
    #利用range()函数生成col列数（row到0）倒循环（步长-1）
    for col in range(row, 0, -1):
        # 使用format占位，保证输出效果整齐，end = ''用于不换行
        print('{} * {} = {:<5}'.format(col, row, col * row), end = '')
    print('')
print('=' * 120)
print('\n')
#两种方式之间的分隔区间
print('=' * 120)


#第二种while循环方法：

#左下三角
#定义变量row1初始值=1
row1 = 1
#当行数<=9的时候，while循环按此遍历
while row1 <= 9:
    #定义变量col1初始值=1
    col1 = 1
    #列数<=行数持续遍历循环
    while col1 <= row1:
        # 使用format占位，保证输出效果整齐，end = ''用于不换行
        print('{} * {} = {:<5}'.format(col1, row1, col1 * row1), end = '')
        #列数加1
        col1 += 1
    #换行
    print('')
    #行数加1
    row1 += 1
print('=' * 120)
print('\n')


#左上三角
#定义变量row1初始值=9
row1 = 9
#当行数>=1的时候，while循环按此遍历
while row1 >= 1:
    col1 = 1
    while col1 <= row1:
        # 使用format占位，保证输出效果整齐，end = ''用于不换行
        print('{} * {} = {:<5}'.format(col1, row1, col1 * row1), end = '')
        #列数加1
        col1 += 1
    print('')
    #行数减1
    row1 -= 1
print('=' * 120)
print('\n')


#右下三角
#定义变量row1初始值=1
row1 = 1
while row1 <= 9:
    #定义变量block1初始值=1，用于定位
    block1 = 1
    while block1 <= 9 - row1:
        print (end = '             ')
        block1 += 1
    col1 = row1
    while col1 >= 1:
        # 使用format占位，保证输出效果整齐，end = ''用于不换行
        print('{} * {} = {:<5}'.format(col1, row1, col1 * row1), end = '')
        col1 -= 1
    print('')
    row1 += 1
print('=' * 120)
print('\n')


#右上三角
#定义变量row1初始值=9
row1 = 9
while row1 >= 1:
    #定义变量block1初始值9，用于定位
    block1 = 9
    while (block1 - row1) > 0:
        print (end = '             ')
        block1 -= 1
    col1 = row1
    while col1 >= 1:
        # 使用format占位，保证输出效果整齐，end = ''用于不换行
        print('{} * {} = {:<5}'.format(col1, row1, col1 * row1), end = '')
        col1 -= 1
    print('')
    row1 -= 1
print('=' * 120)
print('\n')
